package juego;

import java.util.ArrayList;


public abstract class Colateral extends Automata{
	
	//atributos de clase
	private static int miImpacto = 10;
	
	//metodos
	
	//constructor
	public Colateral(int x, int y) {
		super(x,y);
	};
	
	//Devuelve el impacto provocado
    @Override
	public Impacto impactoProvocado(){
		return new ImpactoLineal(miImpacto);
	};    
		
	
	@Override
	public int vivir(ArrayList<Movil> listaDeMoviles, ArrayList<Botin> listaDeBotines) {
		int puntaje = 0;
		//movimiento
		this.movimientoPropio();
		//impacto
		puntaje = (this.impactar(listaDeMoviles,listaDeBotines));
		return puntaje;
	};
	
	//retorna 0.resuelve el choque
	protected int impactoPropio(Movil movil, ArrayList<Movil> listaDeMoviles, ArrayList<Botin> listaDeBotines){
		//solo puede ser impactado por el mismo Algo42 o por
		//proyectiles disparados por este
		if (movil.verLealtad()){
			//movil mata a this
			this.vivo = false;
			//movil recibe el impacto. se elimina de la lista si coorresponde
			movil.recibirImpacto(this.impactoProvocado(), listaDeMoviles, listaDeBotines);
			//nada con lo que pueda impactar modificara el puntaje
		}
		return 0;
	}
	
	//se encarga de destruirse si corresponde.retorna el puntaje
	protected int verificarDestruccion(ArrayList<Movil> listaDeMoviles, ArrayList<Botin> listaDeBotines){
		if(this.vivo){
			return 0;
		}
		//si no esta vivo se destruye y retorna el puntaje por destruccion
		this.destruirse(listaDeMoviles);
		return this.puntajePorDestruccion();
	}
	
	//siempre que recibe un impacto es destruido. 
	@Override
	public int recibirImpacto(Impacto impacto, ArrayList<Movil> listaDeMoviles, ArrayList<Botin> listaDeBotines){
		this.vivo = false;
		int puntaje = this.verificarDestruccion(listaDeMoviles, listaDeBotines);
		return puntaje;
	};
	
	@Override
	public boolean esNaveEnemiga(){
		
		return false;
	};
	
	@Override
	public boolean esProyectil(){
		
		return false;
	}
	
	protected abstract int puntajePorDestruccion();
	
	
	
}
